Utility computing may be described as a process of accessing computing resources, capabilities, services, business processes, and/or applications from a utility-like service over a network. A company may use a common infrastructure to provide multiple clients with utility computing service, thus benefiting through economies of scale. Similarly, a client (e.g., a company receiving utility computing services) may use a utility computing service provider to avoid costs associated with providing such services in-house, such as hardware costs, software costs, operation costs, as well as maintenance and support costs. Such a client may benefit financially by only paying for infrastructure and services actually used.
One example of a computing utility may be grid computing, in which spare compute cycles of one entity may be provided for use by another entity. Another example may be a data center, where a large pool of information technology (IT) resources are centrally managed to meet the needs of business critical enterprise applications such as enterprise resource planning applications, database applications, customer relationship management applications, and general e-commerce applications. It should be noted that computing utilities such as these (e.g., grid computing and data center) may require infrastructure and management support.
A large utility computing environment may contain thousands of servers and storage devices connected through a shared high-speed network fabric. The goal of assembling such an environment may be to provide compute, networking, and storage resources to applications as needed. Accordingly, resources may be virtualized and shared across multiple applications to achieve economies of scale and increase return on investment.
Simultaneously managing an infrastructure along with applications may be very complex. However, despite the fact that manual allocation is often inefficient, error prone, and costly, existing data centers typically utilize human operators to manually allocate resources to applications. Accordingly, operation costs and problems with human error may become excessive. Further, for large scale data centers, manual assignment of resources may be extremely difficult.